package com.v2.k6;


import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 测试FactoryBean
 */
public class Test {

	public static void main(String[] args) {
		// 其实在这一步，spring启动完之后会创建了一个testFactoryBean对象：详细如下
		// 在applicationContext的beanFactory属性下的beanDefinitionMap属性 下有 testFactoryBean名字的bd，类型是ScannedGnericBeanDefinition；
		// 在applicationContext的beanFactory属性下的单例池属性（singletonObjects）有 testFactoryBean名字的bean，类型是TestFactoryBean；
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

		//所以getObject是在getBean的时候调用  getObject的bean会放到单例池中，是在cache中，让testFactoryBean和Apple对象关联，每次查都是先查缓存cache
		// bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);  在这里去判断拿的bean是不是FactoryBean
		System.out.println(applicationContext.getBean("testFactoryBean"));
		System.out.println(applicationContext.getBean("testFactoryBean"));
		System.out.println(applicationContext.getBean("testFactoryBean"));

		//如果上面这种情况下想取testFactoryBean，则要加&
		System.out.println(applicationContext.getBean("&testFactoryBean"));

	}

}
